migrations.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { NextApiRequest, NextApiResponse } from 'next'
  2. import { constructHeaders } from '@/lib/api/apiHelpers'
  3. import apiWrapper from '@/lib/api/apiWrapper'
  4. import { applyAndTrackMigrations, listMigrationVersions } from '@/lib/api/self-hosted/migrations'
  5. import { PgMetaDatabaseError } from '@/lib/api/self-hosted/types'
  6. export default (req: NextApiRequest, res: NextApiResponse) =>
  7. apiWrapper(req, res, handler, { withAuth: true })
  8. async function handler(req: NextApiRequest, res: NextApiResponse) {
  9. const { method } = req
  10. switch (method) {
  11. case 'GET':
  12. return handleGetAll(req, res)
  13. case 'POST':
  14. return handlePost(req, res)
  15. default:
  16. res.setHeader('Allow', ['GET', 'POST'])
  17. res.status(405).json({ error: { message: `Method ${method} Not Allowed` } })
  18. }
  19. }
  20. const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => {
  21. const headers = constructHeaders(req.headers)
  22. const { data, error } = await listMigrationVersions(headers)
  23. if (error) {
  24. if (error instanceof PgMetaDatabaseError) {
  25. const { statusCode, message, formattedError } = error
  26. return res.status(statusCode).json({ message, formattedError })
  27. }
  28. const { message } = error
  29. return res.status(500).json({ message, formattedError: message })
  30. } else {
  31. return res.status(200).json(data)
  32. }
  33. }
  34. const handlePost = async (req: NextApiRequest, res: NextApiResponse) => {
  35. const headers = constructHeaders(req.headers)
  36. const { query, name } = req.body
  37. const { data, error } = await applyAndTrackMigrations({ query, name, headers })
  38. if (error) {
  39. if (error instanceof PgMetaDatabaseError) {
  40. const { statusCode, message, formattedError } = error
  41. return res.status(statusCode).json({ message, formattedError })
  42. }
  43. const { message } = error
  44. return res.status(500).json({ message, formattedError: message })
  45. } else {
  46. return res.status(200).json(data)
  47. }
  48. }